#include <iostream>
/* 给两个整型数，再给一个算术符做四则运算
    int a, b;
    char c; // '+' '-' '*' '/'
*/
// 多分支写法
// int GetResult(int a, int b, char c)
// {
//     switch(c)
//     {
//         case '+':return a + b; break;
//         case '-':return a - b; break;
//         case '*':return a * b; break;
//         case '/':return a / b; break;
//         default:
//             break;
//     }
// }
// 这样每多写一个功能就得往里添，代码就会越来越长，难以维护
// 多分支代码一定非常难维护，哪怕封装做的再好

// 多态形式（相同的代码，不同的表现形式）
using namespace std;
class Caculate
{
public:
    virtual int GetResult(int a, int b)
    {
        return 0;
    }
};

class Add : public Caculate
{
public:
    int GetResult(int a, int b)
    {
        return a + b;
    }
};

class Minus : public Caculate
{
public:
    int GetResult(int a, int b)
    {
        return a - b;
    }
};

class Mul : public Caculate
{
public:
    int GetResult(int a, int b)
    {
        return a * b;
    }
};

class Div : public Caculate
{
public:
    int GetResult(int a, int b)
    {
        return a / b;
    }
};

Caculate *cal[10];
Caculate *ChooseCal(char c)
{
    Caculate *cacul;
    switch (c)
    {
    case '+':cacul = cal[0];break;
    case '-':cacul = cal[1];break;
    case '*':cacul = cal[2];break;
    case '/':cacul = cal[3];break;
    default:
        break;
    }
    return cacul;
}
int main()
{
    cal[0] = new Add;
    cal[1] = new Minus;
    cal[2] = new Mul;
    cal[3] = new Div;

    int a, b;
    char c; // '+' '-' '*' '/'
    cin>>a>>b>>c;
    cout<<ChooseCal(c)->GetResult(a, b)<<endl;

    // 相同的代码，不同的表现形式  --> 多态
    return 0;
}